Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Multithreading</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Multithreading"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Multithreading rootpage-Multithreading skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Multithreading</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p><b>Multithreading</b> (<a href="Englische_Sprache" title="Englische Sprache">englisch</a> wörtlich für <i>Mehrfädigkeit</i> oder auch <i>Mehrsträngigkeit</i> und, weiter übertragen, die <a href="Nebenl%C3%A4ufigkeit" title="Nebenläufigkeit">Nebenläufigkeit</a>) bezeichnet in der <a href="Informatik" title="Informatik">Informatik</a> das gleichzeitige (oder quasi-gleichzeitige) Abarbeiten mehrerer <a href="Thread_(Informatik)" title="Thread (Informatik)">Threads</a> (Ausführungsstränge) innerhalb eines einzelnen <a href="Prozess_(Informatik)" title="Prozess (Informatik)">Prozesses</a> oder eines <a href="Prozess_(Informatik)" title="Prozess (Informatik)">Tasks</a> (ein <a href="Anwendungssoftware" title="Anwendungssoftware">Anwendungsprogramm</a>).
</p><p>Im Gegensatz zum <a href="Multitasking" title="Multitasking">Multitasking</a>, bei dem mehrere unabhängige Programme voneinander <i>abgeschottet</i> <a href="Multitasking" title="Multitasking">quasi-gleichzeitig</a> ausgeführt werden, sind die Threads eines Anwendungsprogramms <i>nicht</i> voneinander abgeschottet und können somit durch sogenannte <a href="Race_Condition" class="mw-redirect" title="Race Condition">Race Conditions</a> Fehler verursachen, die durch <a href="Synchronisation" title="Synchronisation">Synchronisation</a> vermieden werden müssen.
</p><p>Sowohl Multithreading als auch Multitasking können entweder auf nur einem Prozessorkern ausgeführt werden, als auch zusätzlich mit <a href="Mehrprozessorsystem" title="Mehrprozessorsystem">Multiprocessing</a> kombiniert werden (echt-parallele Ausführung durch mehrere Prozessorkerne).
</p>
<div class="mw-heading mw-heading2"><h2 id="Software">Software</h2></div>
<p>Seit <a href="Mehrkernprozessor" title="Mehrkernprozessor">Mehrkernprozessoren</a> zunehmend verbreitet sind, ist <a href="Softwareseitiges_Multithreading" title="Softwareseitiges Multithreading">softwareseitiges Multithreading</a> rückläufig; hier ist in aller Regel nur ein <a href="Prozessorkern" title="Prozessorkern">Prozessorkern</a> beteiligt – aus Sicht der Hardware (und im Allgemeinen des Betriebssystems) liegt nur ein einziger Programmausführungs-Zweig vor. Die scheinbar vorhandene Gleichzeitigkeit wird Software-intern, also innerhalb des Anwendungsprogramms und nur von ihm gesteuert, in Wirklichkeit durch geschickte <a href="Sequentialisierung" title="Sequentialisierung">Sequentialisierung</a> („<a href="Thread_(Informatik)" title="Thread (Informatik)">Thread</a>“-Priorisierung) und einer logischen Abstraktion des <a href="Multiplexverfahren" title="Multiplexverfahren">Multiplexverfahrens</a> erzeugt. Einzelne „Threads“ eines Prozesses/Tasks können sehr schnell auf zeitkritische Ereignisse reagieren, während andere Threads langwierige Berechnungen durchführen. Zum Beispiel kann eine Videobearbeitungs-Software eine Szene „im Hintergrund“ berechnen (Thread 1), während sie „im Vordergrund“ auf Eingaben des Benutzers reagiert (Thread 2).
</p><p>Ohne weitere Hardwareunterstützung reduziert das Multithreading die Gesamtsystemleistung durch den beim Kontextwechsel entstehenden <a href="Overhead_(EDV)" title="Overhead (EDV)">Overhead</a> in geringem Maße; bei Abläufen, die voneinander unabhängig sein sollten, kann die Anwendung stattdessen große Performance-Schübe erwirken.
</p><p>Es wird auch unterschieden, ob das Multithreading einzig im Anwendungsprogramm implementiert ist, oder ob es vom Betriebssystem unterstützt stattfindet. Ist es rein anwendungsseitig implementiert, so hat der Programmierer volle Kontrolle, wann welcher Thread welche Ressourcen erhält. Da das gesamte Programm für das Betriebssystem jedoch nur wie ein Ablauf erscheint, wird es komplett eingefroren, sobald es Ressourcen/Dienste anfordert, die gerade nicht zur Verfügung stehen – das ist das Primärproblem bei der Verarbeitung von Nutzereingaben auf einer <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">grafischen Oberfläche</a> und der Abarbeitung von internen Daten und Prozeduren.
</p><p>Ist das Multithreading Betriebssystem-unterstützt, so kann dieses jene Teile einer Anwendung kennen, die nicht blockiert sind – die Anwendung kann (teilweise) weiterarbeiten.
</p>
<div class="mw-heading mw-heading2"><h2 id="Hardware">Hardware</h2></div>
<p>Das <a href="Hardwareseitiges_Multithreading" title="Hardwareseitiges Multithreading">hardwareseitige Multithreading</a> unterscheidet sich vom softwareseitigen dadurch, dass die Hardware eines Prozessors das scheinbare oder echte gleichzeitige Abarbeiten mehrerer Threads unterstützt. Die Software muss diese Fähigkeit verwenden und entsprechend in Threads aufgeteilt sein und diese beim Betriebssystem entsprechend anlegen/registrieren.
</p><p>Moderne Betriebssysteme teilen die Last einer Multithreading-verwendenden Anwendung vollautomatisch auf alle vorhandenen <a href="Prozessorkern" title="Prozessorkern">Prozessorkerne</a> auf – mit dem Höchsttakt eines einzelnen Kernes, so wird eine verbesserte Reaktivität des Betriebssystems gewährleistet als auch die Performance jeder einzelnen Anwendung erhöht.
</p><p>Bei <a href="Symmetrisches_Multiprozessorsystem" title="Symmetrisches Multiprozessorsystem">symmetrischen Multiprozessorsystemen</a> kann die Rechenarbeit eines Prozesses/Tasks durch Multithreading auf mehrere Systemprozessoren verteilt werden.
</p><p>Es muss hierbei genau unterschieden werden zwischen hardwareseitigem Multi<i>threading</i> und <a href="Mehrprozessorsystem" title="Mehrprozessorsystem">Multi<i>processing</i></a>. Bei Multithreading laufen die Threads <i>im selben Task-Kontext</i>, was für die Hardware sehr viel einfacher umzusetzen ist, z.&nbsp;B. wird keine zweite <a href="Memory_Management_Unit" title="Memory Management Unit">MMU</a>/<a href="Seitentabelle" title="Seitentabelle">Seitentabelle</a> benötigt. Bei echtem Multiprocessing ist jeder Ablauf ein eigener Prozess, jedoch könnte die Auslagerung von Threads auf physisch vorhandene Prozessorkerne ebenso als „echt nebenläufig“ eingestuft werden.
</p><p>Beim hardwareseitigen Multithreading entsteht nur marginaler Overhead während des Kontextwechsels, sofern die Anzahl der Rechenzeit-fordernden Software-Threads die Anzahl Hardware-unterstützter Threads nicht übersteigt und somit jeder Thread „seine“ CPU-Ressourcen (vor allem den Registersatz) stets behalten kann.
</p><p>Zusätzlich können (sowohl bei Hardware-seitigem Multithreading wie auch bei Multitasking) Prozessor-Funktionseinheiten, die von einem Rechenablauf gerade nicht verwendet werden, von einem anderen Thread verwendet werden (meist <a href="Hyper-Threading" title="Hyper-Threading">Hyper-Threading</a> genannt). Durch die Vermeidung von <a href="Pipeline-Hazard" title="Pipeline-Hazard">Pipeline-Hazards</a> können dabei unproduktive Taktzyklen vermieden werden, die Gesamtsystemleistung pro CPU bzw. Prozessorkern steigt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://msdn.microsoft.com/de-de/concurrency/default.aspx">MSDN Developer Center: Parallel Computing</a> im <a href="Microsoft_Developer_Network" title="Microsoft Developer Network">MSDN</a></li></ul>
<div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten">
<div style="display: table-cell; vertical-align: middle; width: 100%;">
<div>
Normdaten&nbsp;(Sachbegriff): <a href="Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4377481-7">4377481-7</a></span> </div>
</div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-03-28" href="https://de.wikipedia.org/wiki/?title=Multithreading&amp;oldid=243510798">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>